package com.erdos.core.service;

import java.util.List;

import com.erdos.core.entity.Event;
import com.erdos.core.entity.State;

public interface FSMService {
	/**
	 * 根据当前状态、传入事件及条件值，返回下一个跃迁状态
	 * @param startState 当前状态
	 * @param eventId 转换事件代码
	 * @param condition 判定条件值
	 * @return
	 * @author xiali2
	 * @since  2008-7-31
	 */
	public State processTransition(State startState, String eventId, Integer condition);
	
	/**
	 * 根据事件代码和条件查询起始状态对象
	 * 数据库配置要求：
	 * MES_STATE_TRANSITION表中：
	 * START_STATE_SID置为null，END_STATE_SID放希望的起始状态，
	 * EVENT_SID放事件代码对应的事件主键，TRANSITION_CONDITION根据情况设置
	 * @param eventId 转换事件代码
	 * @param condition 判定条件值
	 * @return
	 * @author xiali2
	 * @since  2008-8-22
	 */
	public State findStartState(String eventId, Integer condition);
	
	/**
	 * 查询startState下可用的跃迁状态集合
	 * @param startState
	 * @return
	 * @author xiali2
	 * @since  2008-7-31
	 */
	public List<State> findAvaiableState(State startState);
	
	/**
	 * 查询startState下可用的事件集合
	 * @param startState
	 * @return
	 * @author xiali2
	 * @since  2008-7-31
	 */
	public List<Event> findAvaiableEvent(State startState);
	
	/**
	 * 通过事件代码查询事件对象
	 * @param eventId 事件代码
	 * @return
	 * @author xiali2
	 * @since  2008-8-4
	 */
	public Event findUniqueEvent(String eventId);

}
